export class HttpGetRouterResponse {
    Realms: string[];
    Routers: string[];
}

export class RouterSync {
    ConnectId: number;
    Address: string;
}

/**
 * @Interface IActorLocationResponse
 */
export class M2C_TestResponse {
    RpcId: number;
    Error?: number;
    Message?: string;
    Response: string;
}

/**
 * @ResponseTypeAttribute M2C_TestResponse
 * @Interface IActorLocationRequest
 */
export class C2M_TestRequest {
    RpcId: number;
    Request: string;
}

/**
 * @Interface IActorLocationResponse
 */
export class Actor_TransferResponse {
    RpcId: number;
    Error?: number;
    Message?: string;
}

/**
 * @ResponseTypeAttribute Actor_TransferResponse
 * @Interface IActorLocationRequest
 */
export class Actor_TransferRequest {
    RpcId: number;
    MapIndex: number;
}

/**
 * @Interface IResponse
 */
export class G2C_EnterMap {
    RpcId: number;
    Error?: number;
    Message?: string;
    // 自己unitId
    MyId: number;
}

/**
 * @ResponseTypeAttribute G2C_EnterMap
 * @Interface IRequest
 */
export class C2G_EnterMap {
    RpcId: number;
}

export class Float3 {
    x?: number;
    y?: number;
    z?: number;
}

export class Quaternion {
    x?: number;
    y?: number;
    z?: number;
    w?: number;
}

export class MoveInfo {
    Points: Float3;
    Rotation: Quaternion;
    TurnSpeed: number;
}

export class UnitInfo {
    UnitId: number;
    ConfigId: number;
    Type: number;
    Position: Float3;
    Forward: Float3;
    MoveInfo: MoveInfo;
}

/**
 * @Interface IActorMessage
 */
export class M2C_CreateUnits {
    Units: UnitInfo[];
}

/**
 * @Interface IActorMessage
 */
export class M2C_CreateMyUnit {
    Unit: UnitInfo;
}

/**
 * @Interface IActorMessage
 */
export class M2C_StartSceneChange {
    SceneInstanceId: number;
    SceneName: string;
}

/**
 * @Interface IActorMessage
 */
export class M2C_RemoveUnits {
    Units: number;
}

/**
 * @Interface IActorLocationMessage
 */
export class C2M_PathfindingResult {
    RpcId: number;
    Position: Float3;
}

/**
 * @Interface IActorLocationMessage
 */
export class C2M_Stop {
    RpcId: number;
}

/**
 * @Interface IActorMessage
 */
export class M2C_PathfindingResult {
    Id: number;
    Position: Float3;
    Points: Float3[];
}

/**
 * @Interface IActorMessage
 */
export class M2C_Stop {
    Error: number;
    Id: number;
    Position: Float3;
    Rotation: Quaternion;
}

/**
 * @Interface IResponse
 */
export class G2C_Ping {
    RpcId: number;
    Error?: number;
    Message?: string;
    Time: number;
}

/**
 * @ResponseTypeAttribute G2C_Ping
 * @Interface IRequest
 */
export class C2G_Ping {
    RpcId: number;
}

/**
 * @Interface IResponse
 */
export class R2C_Login {
    RpcId: number;
    Error?: number;
    Message?: string;
    Address: string;
    Key: number;
    GateId: number;
}

/**
 * @ResponseTypeAttribute R2C_Login
 * @Interface IRequest
 */
export class C2R_Login {
    RpcId: number;
    Account: string;
    Password: string;
}

/**
 * @Interface IResponse
 */
export class G2C_LoginGate {
    RpcId: number;
    Error?: number;
    Message?: string;
    PlayerId: number;
}

/**
 * @ResponseTypeAttribute G2C_LoginGate
 * @Interface IRequest
 */
export class C2G_LoginGate {
    RpcId: number;
    Key: number;
    GateId: number;
}

/**
 * @Interface IMessage
 */
export class G2C_Test {
}

/**
 * @Interface IResponse
 */
export class M2C_Reload {
    RpcId: number;
    Error?: number;
    Message?: string;
}

/**
 * @ResponseTypeAttribute M2C_Reload
 * @Interface IRequest
 */
export class C2M_Reload {
    RpcId: number;
    Account: string;
    Password: string;
}

/**
 * @Interface IMessage
 */
export class G2C_TestHotfixMessage {
    Info: string;
}

/**
 * @Interface IActorLocationResponse
 */
export class M2C_TestRobotCase {
    RpcId: number;
    Error?: number;
    Message?: string;
    N: number;
}

/**
 * @ResponseTypeAttribute M2C_TestRobotCase
 * @Interface IActorLocationRequest
 */
export class C2M_TestRobotCase {
    RpcId: number;
    N: number;
}

/**
 * @Interface IActorLocationResponse
 */
export class M2C_TransferMap {
    RpcId: number;
    Error?: number;
    Message?: string;
}

/**
 * @ResponseTypeAttribute M2C_TransferMap
 * @Interface IActorLocationRequest
 */
export class C2M_TransferMap {
    RpcId: number;
}

/**
 * @Interface IResponse
 */
export class A2C_LoginAccount // IResponse
{
    RpcId: number;
    Error?: number;
    Message?: string;
    Token?: string;
    AccountId?: number;
}

/**
 * @ResponseTypeAttribute A2C_LoginAccount
 * @Interface IRequest
 */
export class C2A_LoginAccount {
    RpcId: number;
    AccountName: string;
    Password: string;
}

/**
 * @Interface IMessage
 */
export class A2C_Disconnect {
    Error: number;
}

/**
 * @ResponseTypeAttribute A2C_LoginAccount
 * @Interface IResponse
 */
export class A2C_GetServerInfos {
    RpcId: number;
    Error?: number;
    Message?: string;
    ServerInfosList?: ServerInfoProto[];
}

export class ServerInfoProto {
    Id: number;
    Status: number;
    ServerName: string;
}

/**
 * @ResponseTypeAttribute A2C_GetServerInfos
 * @Interface IRequest
 */
export class C2A_GetServerInfos {
    RpcId: number;
    Token: string;
    AccountId: number;
}

export class RoleInfoProto {
    Id: number;
    Name: string;
    State: number;
    AccountId: number;
    LastLoginTime: number;
    CreateTime: number;
    ServerId: number;
}

/**
 * @Interface IResponse
 */
export class A2C_CreateRole {
    RpcId: number;
    Error?: number;
    Message?: string;
    RoleInfo?: RoleInfoProto;
}

/**
 * @ResponseTypeAttribute A2C_CreateRole
 * @Interface IRequest
 */
export class C2A_CreateRole {
    RpcId: number;
    Token: string;
    AccountId: number;
    Name: string;
    ServerId: number;
}

/**
 * @Interface IResponse
 */
export class A2C_GetRoles {
    RpcId: number;
    Error?: number;
    Message?: string;
    RoleInfo?: RoleInfoProto[];
}

/**
 * @ResponseTypeAttribute A2C_GetRoles
 * @Interface IRequest
 */
export class C2A_GetRoles {
    RpcId: number;
    Token: string;
    AccountId: number;
    ServerId: number;
}

/**
 * @Interface IResponse
 */
export class A2C_DeleteRole {
    RpcId: number;
    Error?: number;
    Message?: string;
    DeletedRoleInfoId: number;
}

/**
 * @ResponseTypeAttribute A2C_DeleteRole
 * @Interface IRequest
 */
export class C2A_DeleteRole {
    RpcId: number;
    Token: string;
    AccountId: number;
    RoleInfoId: number;
    ServerId: number;
}

/**
 * @Interface IResponse
 */
export class A2C_GetRealmKey {
    RpcId: number;
    Error?: number;
    Message?: string;
    RealmKey?: string;
    RealmAddress?: string;
}

/**
 * @ResponseTypeAttribute A2C_GetRealmKey
 * @Interface IRequest
 */
export class C2A_GetRealmKey {
    RpcId: number;
    Token: string;
    ServerId: number;
    AccountId: number;
}

/**
 * @Interface IResponse
 */
export class R2C_LoginRealm {
    RpcId: number;
    Error?: number;
    Message?: string;
    GateSessionKey: string;
    GateAddress: string;
}

/**
 * @ResponseTypeAttribute R2C_LoginRealm
 * @Interface IRequest
 */
export class C2R_LoginRealm {
    RpcId: number;
    AccountId: number;
    RealmTokenKey: string;
}

/**
 * @Interface IResponse
 */
export class G2C_LoginGameGate {
    RpcId: number;
    Error?: number;
    Message?: string;
    PlayerId?: number;
}

/**
 * @ResponseTypeAttribute G2C_LoginGameGate
 * @Interface IRequest
 */
export class C2G_LoginGameGate {
    RpcId: number;
    Key: string;
    RoleId: number;
    Account: number;
}

/**
 * @Interface IResponse
 */
export class G2C_EnterGame {
    RpcId: number;
    Error?: number;
    Message?: string;
    // 自己unitId
    MyId: number;
}

/**
 * @ResponseTypeAttribute G2C_EnterGame
 * @Interface IRequest
 */
export class C2G_EnterGame {
    RpcId: number;
}